package com.atguigu.gmall.order.service;

import com.atguigu.gmall.model.enums.ProcessStatus;
import com.atguigu.gmall.model.order.OrderInfo;
import com.baomidou.mybatisplus.extension.service.IService;

import java.util.List;
import java.util.Map;

/**
 * @author Fxz
 * @version 1.0
 * @date 2022-02-19 21:32
 */
@SuppressWarnings("all")
public interface OrderService extends IService<OrderInfo> {

	/**
	 * 保存订单
	 */
	Long saveOrderInfo(OrderInfo orderInfo);

	/**
	 * 获取流水号
	 */
	String getTradeNo(String userId);

	/**
	 * 比较流水号
	 */
	Boolean checkTradeNo(String tradeNo, String userId);

	/**
	 * 删除流水号
	 */
	void deleteTradeNo(String userId);

	/**
	 * 验证库存
	 */
	Boolean checkStock(Long skuId, Integer skuNum);

	/**
	 * 修改订单状态
	 */
	void execExpiredOrder(Long orderId);

	/**
	 * 跟据订单id更新订单状态
	 */
	void updateOrderStatus(Long orderId, ProcessStatus processStatus);

	/**
	 * 跟据订单id 查询订单信息
	 */
	OrderInfo getOrderInfo(Long orderId);

	/**
	 * 跟据orderId发送消息给库存并修改订单状态
	 */
	void sendOrderStatus(Long orderId);

	/**
	 * 发送减库存消息的字符串
	 */
	String initWareOrder(Long orderId);

	/**
	 * 发送减库存消息的字符串
	 */
	Map initWareOrder(OrderInfo orderInfo);

	/**
	 * 拆单方法
	 */
	List<OrderInfo> orderSplit(String orderId, String wareSkuMap);

	/**
	 * 关闭过期订单
	 * @param orderId 订单id
	 * @param flag 是否需要关闭paymentInfo
	 */
	void execExpiredOrder(Long orderId, String flag);

}
